package cn.lg.soar.boot.fc.service;

import cn.lg.soar.boot.fc.entity.bo.BuildingBo;
import cn.lg.soar.boot.fc.entity.vo.BuildingEasyVo;
import cn.lg.soar.boot.fc.entity.vo.BuildingVo;
import cn.lg.soar.boot.fc.entity.vo.FcStatisticsVo;
import cn.lg.soar.common.model.HttpResult;
import cn.lg.soar.common.model.PageQuery;
import cn.lg.soar.common.model.PageResult;
import cn.lg.soar.database.base.service.IBaseService;
import cn.lg.soar.boot.fc.entity.Building;
import cn.lg.soar.database.query.QueryParams;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 楼栋表
 * @author ZhuanZ（无密码）
 * @since 2025-01-10
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface BuildingService extends IBaseService<Building> {

    /**
     * 创建数据
     * @param buildingBo
     * @return
     */
    HttpResult<Serializable> create (BuildingBo buildingBo);

    /**
     * 更新数据
     * @param buildingBo
     * @return
     */
    HttpResult<Void> update (BuildingBo buildingBo);

    /**
     * 通过id查询数据
     * @param id
     * @return
     */
    Building getData (Long id);

    /**
     * 获取vo数据
     * @param id
     * @return
     */
    BuildingVo getVoData (Long id);

    /**
     * 获取vo数据
     * @param id
     * @return
     */
    BuildingEasyVo getEasyVoData (Long id);

    /**
     * 列表翻页查询 当前模型实现类
     * @param pageQuery
     * @param params
     * @return
     */
    PageResult<BuildingVo> queryResultVo (PageQuery pageQuery, QueryParams params);

    /**
     * 检索关联 获取对应校区的 楼栋 信息vo
     * @param params
     * @return
     */
    List<BuildingVo> getListVoByCampusId (QueryParams params);
    List<Building> getListByCampusId (QueryParams params);

    /**
     * 获取楼栋统计信息 展示 总数，总建筑面积，总使用面积
     * @return
     */
    FcStatisticsVo getStatistics (Long campusId);

    /**
     * 通过校区id 楼栋名字获取楼栋
     * @param campusId
     * @param name
     * @return
     */
    Building getByCampusIdAndName (Long campusId, String name);

    /**
     * 导出表格
     * @param filename
     * @param params
     * @param resp
     */
    void exportExcel (String filename, QueryParams params, HttpServletResponse resp);

    /**
     * 导入房间信息
     * @param files
     * @return
     */
    HttpResult<Void> importExcel (MultipartFile files);

    /**
     * 拖拽排序
     */
    HttpResult<Serializable> updateSort(List<Map<String, Integer>> sortedData);

}
